Kopia zaznamu s relaciou 1:N - Firebird
Otázka od: martin
1. 7. 2004 10:25
Dobry den,
narazil som na problem s ktorym sa uz trapim 2 dni.
Klasicky pripad:
2 tabulky (doklad,polozky)
Atributy (doklad) - id_doklad,xxx1,xxx2,xxx3
Atributy (polozky) - id_polozka,id_doklad,yyy1,yyy2,yyy3
Cize vazba je cez id_doklad. Je nastaveny CASCADE UPDATE
...A POTREBUJEM POMOCOU SQL VYTVORIT KOPIU DOKLADU AJ S POLOZKAMI,
a to tak aby novy duplikat mal id_doklad nastaveny na novu mnou
zadanu hodnotu alebo na hodnotu podla generatora.
Riesim to teraz na strane klienta, ale to riesenie sa mi vobec
nepaci, a verim, ze existuje nejaka SQL finta, aby ten proces bezal
na strane servera.
Skusal som nieco take:
INSERT INTO doklad SELECT * FROM doklad WHERE
id_doklad=cislopovodnehodokladu
INSERT INTO polozky SELECT * FROM doklad WHERE
id_doklad=cislopovodnehodokladu
ale problem je, s primarnym klucom - hlasi to konflikt, nakolko sa
kopiruje aj hodnota toho kluca, KTORY UZ EXISTUJE
Dalej problem je v tom, ze v tabulke "polozky" ten insert nastavi
id_doklad na cislopovodnehodokladu a tam by malo byt cislo
novehodokladu.
Ako teda riesite taku kopiu zaznamu/ov kde je vztah medzi tabulkami
1:N ?
Verim, ze mi pomozete.
--
Martin
D7Pro,FB1.5,FibPlus
Odpovedá: Libor Junek, Medisoft International
1. 7. 2004 11:45
To tvoje reseni s INSERTem je spravne akorat si musis ty sloupce vyjmenovat
a jako hodnotu id musis predavat hodnotu generatoru. Musis si ale to id
ulozit do promene pro ten druhy insert na vazbu. Idealni by byla promenna v
ulozene procedure na FB.
Libor
----- Original Message -----
From: "martin" <matrix@inmail.cz>
Sent: Thursday, July 01, 2004 11:07 AM
> 2 tabulky (doklad,polozky)
>
> Atributy (doklad) - id_doklad,xxx1,xxx2,xxx3
> Atributy (polozky) - id_polozka,id_doklad,yyy1,yyy2,yyy3
>
> Cize vazba je cez id_doklad. Je nastaveny CASCADE UPDATE
> ...A POTREBUJEM POMOCOU SQL VYTVORIT KOPIU DOKLADU AJ S POLOZKAMI,
> a to tak aby novy duplikat mal id_doklad nastaveny na novu mnou
> zadanu hodnotu alebo na hodnotu podla generatora.
> Skusal som nieco take:
> INSERT INTO doklad SELECT * FROM doklad WHERE
id_doklad=cislopovodnehodokladu
> INSERT INTO polozky SELECT * FROM doklad WHERE
id_doklad=cislopovodnehodokladu